package com.lottery.ruok.lottrey.chat;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils;

import com.lottery.ruok.lottrey.chat.activity.ConversationActivity;

import java.util.Locale;
import java.util.Map;

import io.rong.imkit.RongContext;
import io.rong.imkit.RongIM;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import utils.Utils;

/**
 * 聊天室跳转帮助类
 */
public class RongCloudChatActivityHelper {

    /**
     * <p>启动会话界面。</p>
     * <p>使用时，可以传入多种会话类型 {@link io.rong.imlib.model.Conversation.ConversationType} 对应不同的会话类型，开启不同的会话界面。
     * 如果传入的是 {@link io.rong.imlib.model.Conversation.ConversationType#CHATROOM}，sdk 会默认调用
     * {@link RongIMClient#joinChatRoom(String, int, RongIMClient.OperationCallback)} 加入聊天室。
     * 如果你的逻辑是，只允许加入已存在的聊天室，请使用接口 {@link #startChatRoomChat(Context, String, boolean)} 并且第三个参数为 true</p>
     *
     * @param context          应用上下文。
     * @param conversationType 会话类型。
     * @param targetId         根据不同的 conversationType，可能是用户 Id、群组 Id 或聊天室 Id。
     * @param title            聊天的标题，开发者可以在聊天界面通过 intent.getData().getQueryParameter("title") 获取该值, 再手动设置为标题。
     */
    public static void startConversation(Context context, Conversation.ConversationType conversationType, String targetId, String title) {
        RongIM.getInstance().startConversation(context, conversationType, targetId, title);
    }

    /**
     * 启动会话列表界面。
     *
     * @param context               应用上下文。
     * @param supportedConversation 定义会话列表支持显示的会话类型，及对应的会话类型是否聚合显示。
     *                              例如：supportedConversation.put(Conversation.ConversationType.PRIVATE.getName(), false) 非聚合式显示 private 类型的会话。
     */
    public static void startConversationList(Context context, Map<String, Boolean> supportedConversation) {
        RongIM.getInstance().startConversationList(context, supportedConversation);
    }

    /**
     * 启动聚合后的某类型的会话列表。<br> 例如：如果设置了单聊会话为聚合，则通过该方法可以打开包含所有的单聊会话的列表。
     *
     * @param context          应用上下文。
     * @param conversationType 会话类型。
     */
    public static void startSubConversationList(Context context, Conversation.ConversationType conversationType) {
        RongIM.getInstance().startSubConversationList(context, conversationType);
    }

    public static void startPrivateChat(Context context, String targetUserId, String title) {
        RongIM.getInstance().startPrivateChat(context, targetUserId, title);
    }

    /**
     * <p>启动聊天室会话。</p>
     * <p>设置参数 createIfNotExist 为 true，对应到 kit 中调用的接口是
     * {@link RongIMClient#joinChatRoom(String, int, RongIMClient.OperationCallback)}.
     * 如果聊天室不存在，则自动创建并加入，如果回调失败，则弹出 warning。</p>
     * <p>设置参数 createIfNotExist 为 false，对应到 kit 中调用的接口是
     * {@link RongIMClient#joinExistChatRoom(String, int, RongIMClient.OperationCallback)}.
     * 如果聊天室不存在，则返回错误 {@link io.rong.imlib.RongIMClient.ErrorCode#RC_CHATROOM_NOT_EXIST}，并且会话界面会弹出 warning.
     * </p>
     *
     * @param context          应用上下文。
     * @param chatRoomId       聊天室 id。
     * @param createIfNotExist 如果聊天室不存在，是否创建。
     */
    public static void startChatRoomChat(Context context, String chatRoomId, boolean createIfNotExist) {
        startChatRoomChat(context, chatRoomId, createIfNotExist, "","");
    }

    public static void startChatRoomChat(Context context, String chatRoomId, boolean createIfNotExist, String lotteryCode,String roomName) {
        if (context != null && !TextUtils.isEmpty(chatRoomId)) {
            if (RongContext.getInstance() == null) {
                Utils.showToast("正在初始化,请稍后再试");
//                throw new ExceptionInInitializerError("RongCloud SDK not init");
            } else {
                Uri uri = Uri.parse("rong://" + context.getApplicationInfo().packageName).buildUpon().appendPath("conversation").appendPath(Conversation.ConversationType.CHATROOM.getName().toLowerCase(Locale.US)).appendQueryParameter("targetId", chatRoomId).appendQueryParameter("title", roomName).build();
                Intent intent = new Intent("android.intent.action.VIEW", uri);
                intent.putExtra("createIfNotExist", createIfNotExist);
                intent.putExtra(ConversationActivity.EXTRA_LOTTERY_CODE, lotteryCode);
                context.startActivity(intent);
            }
        } else {
            Utils.showToast("聊天室不存在，请稍后再试");
//            throw new IllegalArgumentException();
        }
    }
}
